package com.study.demo;

import java.io.Serializable;

import org.flowable.bpmn.model.FlowElement;
import org.flowable.engine.delegate.DelegateExecution;

/** 
 * 多实例完成的条件判断 
 * 	1. 判断该节点上一个节点是不是并行网关节点
	2. 如果上一个节点是提交者的话要处理一下
	3. 添加审批意见和修改流程状态
	4. 删除现有的所有任务
	5. 删除节点信息
	6. 驳回到disk节点
	6.1 如果当前节点是多实例节点 删除当前多实例 如果目标节点不是多实例我们就创建一个孩子实例
	6.2 处理并行网关的多实例
 */  
public class MulitiInstanceCompleteTask implements Serializable {  
    private static final long serialVersionUID = 1L;  
    
    public boolean completeTask(DelegateExecution execution) {  
        System.out.println("总的会签任务数量：" + execution.getVariable("nrOfInstances") + "当前获取的会签任务数量：" + execution.getVariable("nrOfActiveInstances") + " - " + "已经完成的会签任务数量：" + execution.getVariable("nrOfCompletedInstances"));  
        System.out.println("I am invoked.");  
        
        //一票否决
        Boolean oneReject = false;
        
        //一票通过
        Boolean onePass = false;
        
        if(execution.getVariable("onePass") != null) {
        	onePass = true;
        }
        if(execution.getVariable("oneReject") != null) {
        	oneReject = true;
        }
        
        if(onePass) {
        	return true;
        }
        
        if(oneReject) {
        	FlowElement flowElement = execution.getCurrentFlowElement();
        	String activityId = execution.getCurrentActivityId();
        	
        	System.out.println("当前结点id："+flowElement.getId());
        	System.out.println("当前活动id："+activityId);
        	System.out.println("当前流程id："+execution.getProcessInstanceId());
        	//驳回到指定节点
        	//TODO
        	//DealMultiInstanceTurnDown.backToStep(flowElement,execution.getProcessInstanceId())
        }
        
        return false;  
    }  
}  